package com.netx.cubigraf.servlets;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.netx.data.Connection;
import com.netx.data.DatabaseException;
import com.netx.ebs.EbsRequest;
import com.netx.ebs.EbsResponse;
import com.netx.ebs.TemplateValues;
import com.netx.generics.sql.Row;
import com.netx.generics.sql.Table;
import com.netx.generics.time.Moment;
import com.netx.generics.util.Strings;
import com.netx.cubigraf.entities.Entities;
import com.netx.cubigraf.entities.Referencia;


public class SrvFichasEntregaCriar extends CubigrafServlet {

	public SrvFichasEntregaCriar() {
		super("fichas-criar");
	}
	
	public void doGet(EbsRequest request, EbsResponse response) throws IOException, DatabaseException {
		long cdgFicha = request.getLongParameter("codigo", true).longValue();
		Connection c = request.getDatabaseConnection();
		
		Table[] result = Entities.getFichasEntrega(c).verFichaEntrega(cdgFicha);
		Row ficha = result[0].getRow(0);
		Table linhas = result[1];

		TemplateValues tv = new TemplateValues();
		tv.put("codigo", ficha.getString(1));
		tv.put("cliente", ficha.getString(2));
		tv.put("data_actual", new Moment().getDate().format());
		double total = 0;
		List<TemplateValues> svc = new ArrayList<TemplateValues>();
		for(int i=0; i<linhas.getRowCount(); i++) {
			TemplateValues tv2 = new TemplateValues();
			tv2.put("codigo_servico", linhas.getString(1, i));
			tv2.put("referencia", new Referencia(linhas.getDate(4, i), linhas.getInt(3, i)).toString());
			tv2.put("designacao", linhas.getString(2, i));
			tv2.put("num_cores", linhas.getString(5, i));
			tv2.put("medidas", linhas.getString(6, i)+"x"+linhas.getString(7, i));
			double preco = Entities.getServicos(c).verPrecoServico(linhas.getInt(1, i));
			tv2.put("preco", Strings.valueOf(preco, 0, 2));
			total += preco;
			svc.add(tv2);
		}
		tv.put("total", Strings.valueOf(total, 0, 2));
		tv.putList("servicos", svc);

		c.close();
		response.setContentType("text/html");
		response.sendDisableCache();
		response.sendTemplate("fichas-entrega.criar.tplt", tv);
	}

	public void doPost(EbsRequest request, EbsResponse response) throws IOException, DatabaseException {
		long cdgFicha = request.getLongParameter("codigo").longValue();
		Connection c = request.getDatabaseConnection();
		Entities.getFichasEntrega(c).criarFicha(cdgFicha);
		
		// Guardar o registo dos ultimos X:
		@SuppressWarnings("unchecked")
		List<Object[]> ultimosX = (List<Object[]>)request.getUserSession().getAttribute("fichas-entrega.ultimosX");
		if(ultimosX == null) {
			ultimosX = new ArrayList<Object[]>();
			request.getUserSession().setAttribute("fichas-entrega.ultimosX", ultimosX);
		}
		Row result = Entities.getFichasEntrega(c).verFichaParaEntregar(cdgFicha);
		Object[] array = new Object[] {new Boolean(result.getBoolean(4)), result};
		ultimosX.add(0, array);
		if(ultimosX.size() == 11) {
			ultimosX.remove(10);
		}
		c.close();
		response.sendRedirect("fichas-entrega.ficha?codigo="+cdgFicha);
	}

}
